#include <iostream>
// #include <pthread.h>
#include <pthread.h>
#include <cstdlib>
#include <unistd.h>
#include <string>
using namespace std;
string Tohex(pthread_t tid)
{
    char hex[64];
    snprintf(hex, sizeof(hex), "%p", tid);
    return hex;
}
void *threadCoutine(void *args)
{
    while (true)
    {
        cout << "new thread tid:" << Tohex(pthread_self()) << endl;
        sleep(1);
    }
}
int main()
{
    pthread_t tid;
    pthread_create(&tid, nullptr, threadCoutine, (void *)"thread 1");

    cout << "i am a main thread,new thread tid:" << Tohex(tid) << endl;
    pthread_join(tid, nullptr);
    return 0;
}
// void headler()
// {
//     cout << "i am a new thread" << endl;
//     sleep(1);
// }
// int main()
// {
//     std::thread t1(headler);
//     t1.join();
//     return 0;
// }

// class Request
// {
// public:
//     Request(int start, int end, const string &threadname)
//         : start_(start), end_(end), threadname_(threadname)
//     {
//     }
//     int sum()
//     {
//         int result = 0;
//         for (int i = start_; i <= end_; i++)
//         {
//             result += i;
//         }
//         return result;
//     }

// public:
//     int start_;
//     int end_;
//     string threadname_;
// };

// class Response
// {
// public:
//     Response(int result, int exitcode)
//         : result_(result), exitcode_(exitcode)
//     {
//     }

// public:
//     int result_;
//     int exitcode_;
// };
// void *sumResult(void *args)
// {
//     Request *rq = static_cast<Request *>(args);

//     Response *rsp = new Response(rq->sum(), 0);
//     delete rq;
//     return rsp;
// }
// int main()
// {
//     pthread_t tid;
//     Request *rq = new Request(1, 100, "Thread 1");
//     pthread_create(&tid, nullptr, sumResult, rq);
//     void *ret;
//     pthread_join(tid, &ret);
//     Response *rsp = static_cast<Response *>(ret);
//     cout << "result:" << rsp->result_ << ",exitcode:" << rsp->exitcode_ << endl;
//     return 0;
// }
// int g_val = 100;
// void *threadoutine(void *thread)
// {
//     const char *name = (const char *)thread;
//     int cnt = 5;
//     while (true)
//     {
//         printf("%s,pid:%d,g_val:%d,&g_val:%p\n", name, getpid(), g_val, &g_val);
//         // cout << "i am a ,pid:" << getpid() << endl
//         //      << endl;
//         sleep(1);
//         // int a = 10;
//         // a /= 0;
//         cnt--;
//         if (cnt == 0)
//             break;
//     }
//     pthread_exit((void *)11);
//     // return (void *)100;
// }
// int main()
// {
//     pthread_t tid;
//     pthread_create(&tid, nullptr, threadoutine, (void *)"Thread 1");

//     pthread_cancel(tid);
//     // while (true)
//     // {
//     //     printf("i am a main thread,pid:%d,g_val:%d,&g_val:%p,tid:%p\n", getpid(), g_val, &g_val, tid);

//     //     // cout << "i am a main thread,pid:" << getpid() << endl
//     //     //      << endl;
//     //     sleep(1);
//     //     g_val++;
//     // }
//     void *retval;
//     pthread_join(tid, &retval);
//     cout << "main thread quit...,retval:" << (long long int)retval << endl;
//     return 0;
// }